package com.lxh.lxhcrm.controller;

import com.alibaba.fastjson.JSONObject;
import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import com.lxh.lxhcrm.model.pojos.*;
import com.lxh.lxhcrm.model.service.InSaleService;
import org.springframework.web.bind.annotation.*;

import javax.annotation.Resource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * 开发团队 ：lxh
 *
 * @author ：鞠玮
 * 开发时间 ：2020/1/9 10:34
 * 类的名称 ：InSaleController
 * 类的描述 ：售中模块的controller，进行前后端的数据传输控制
 * Administrator
 */
@RestController
@RequestMapping("/in-sale")
@CrossOrigin
public class InSaleController {
    @Resource
    InSaleService is;


    /**
     * 根据合同id查询开票记录
     * @param contractId 合同id
     * @return  回款计划列表
     */
    @GetMapping("/conInvoiceRecord/{contractId}")
    public List<ConInvoiceRecord> findConInvoiceRecordByContractId(@PathVariable Integer contractId){
        return is.findConInvoiceRecordByContractId(contractId);
    }

    /**
     * 新增和修改开票记录
     * @param cir 开票记录对象
     */
    @PostMapping("conInvoice")
    public void saveConInvoice(@RequestBody ConInvoiceRecord cir){
        System.out.println(cir);
        is.saveConInvoice(cir);
    }

    /**
     * 新增和修改回款记录
     * @param returnRecord 回款记录对象
     */
    @PostMapping("/returnRecord")
    public void saveReturnRecord(@RequestBody ReturnRecord returnRecord){
        is.saveReturnRecord(returnRecord);
    }

    /**
     * 根据合同id查询回款记录
     * @param contractId 合同id
     * @return  回款计划列表
     */
    @GetMapping("/returnRecord/{contractId}")
    public List<ReturnRecord> findAllReturnRecordByContractId(@PathVariable Integer contractId){
        return is.findAllReturnRecordByContractId(contractId);
    }

    /**
     * 根据回款计划id删除回款计划
     * @param returnId 回款计划id
     */
    @DeleteMapping("/return-mon/{returnId}")
    public void deleteReturnmon(@PathVariable Integer returnId){
        is.deleteReturnmon(returnId);
    }

    /**
     * 根据合同编号查找回款计划
     * @param contractId 合同编号
     * @return  List<Returnmon> 回款计划列表
     */
    @GetMapping("/return-mon/{contractId}")
    public List<Returnmon> queryReturnMonBycontractId(@PathVariable Integer contractId){
        return is.queryReturnMonBycontractId(contractId);
    }

    /**
     * 保存回款计划
     * @param rn 交付计划json对象
     */
    @PostMapping("/return-mon")
    public void saveReturnMon(@RequestBody Returnmon rn){
        is.saveReturnMon(rn);
    }

    /**
     * 根据合同编号查询交付记录
     * @param contractId 合同编号
     * @return List<DelRecord> 交付计划集合
     */
    @GetMapping("/delivery-record/{contractId}")
    public List<DelRecord> queryDeliveryRecordByContractId(@PathVariable Integer contractId){
        return is.queryDeliveryRecordByContractId(contractId);
    }

    /**
     * 添加交付记录
     */
    @PostMapping("delivery-record")
    public void saveDeliveryRecord(@RequestBody DelRecord dr){
        is.saveDeliveryRecord(dr);
    }

    /**
     * 根据合同id获取交付计划
     *
     * @param contractId：合同id
     * @return List<DeliveryPlan> 交付计划集合
     */
    @GetMapping("delivery/{contractId}")
    public List<DeliveryPlan> getDeliveries(@PathVariable Integer contractId) {
        return is.getDeliveries(contractId);
    }

    /**
     * 根据交付计划编号删除计划
     * @param deliveryPlanId 交付计划编号
     */
    @DeleteMapping("delivery/{deliveryPlanId}")
    public void deleteDelivery(@PathVariable Integer deliveryPlanId){
        is.deleteDelivery(deliveryPlanId);
    }

    /**
     * 添加交付计划
     */
    @PostMapping("/delivery")
    public void addDelivery(@RequestBody DeliveryPlan deliveryPlan) {
        System.out.println(deliveryPlan);
        is.addDelivery(deliveryPlan);
    }

    /**
     * 合同的新增和修改
     *
     * @param contract :合同json对象
     */
    @PostMapping("/contract")
    public void saveContract(@RequestBody Contract contract) {
        is.saveContract(contract);
    }

    /**
     * 分页查询合同列表
     *
     * @param currPage 当前页参数
     * @param pageSize 页大小
     * @param state    合同状态
     * @return 合同列表
     */
    @GetMapping("/contractsByPage")
    public Map<String, Object> contractList(Integer currPage,
                                            Integer pageSize,
                                            Integer state,
                                            String search,
                                            String searchBy) {
        if (currPage == null || currPage == 0) {
            currPage = 1;
        }
        if (pageSize == null || pageSize == 0) {
            pageSize = 8;
        }
        /* 分页 */
        Page<Object> page = PageHelper.startPage(currPage, pageSize);
        Map<String, Object> res = new HashMap<>(3);
        List<Contract> allContract = is.findAllContract(state,search,searchBy);
        res.put("data", allContract);
        res.put("total", page.getTotal());
        return res;
    }

    /**
     * 不分页查询合同列表
     *
     * @param state 合同状态
     * @return 合同列表
     */
    @GetMapping("/contracts")
    public List<Contract> contractList(Integer state) {
        if (state == null) {
            state = 0;
        }
        return is.findAllContract(state, null, null);
    }

    /**
     * 获取最新的五条数据
     * @return List<Contract> 合同集合
     */
    @GetMapping("/newContract")
    public List<Contract> findContractLast() {
        return is.findContractLast();
    }

    /**
     * 获取保存合同页面时候的初始化数据
     *
     * @return JSONObject:初始化的数据集合对象
     */
    @GetMapping("/save_init_data")
    public JSONObject saveInitData() {
        return is.saveInitData();
    }

    /**
     * 查询回款计划中未回款的且设置提醒
     * @return List<Returnmon>
     */
    @GetMapping("/returnmonNotReturn")
    public List<Returnmon> findAllReturnmonNotReturn() {
        return is.findAllReturnmonNotReturn();
    }

    /**
     * 根据合同id获取合同
     * @param contractId 合同id
     * @return Contract 合同对象
     */
    @GetMapping("/contract/{contractId}")
    public Contract findContractById(@PathVariable Integer contractId){
        return is.findContractById(contractId);
    }
}
